NHibernate-এ Fluent Mapping Configuration এবং Convention Class ব্যবহারের মাধ্যমে আপনি ডেটাবেস টেবিলগুলোর সাথে ক্লাসের সম্পর্ক নির্ধারণ করতে পারেন। Fluent Mapping এনহাইবারনেট কনফিগারেশনের জন্য একটি শক্তিশালী এবং প্রোগ্রাম্যাটিক পদ্ধতি প্রদান করে, যা XML কনফিগারেশন ফাইলের পরিবর্তে কোড-ভিত্তিক কনফিগারেশন ব্যবহার করে। Convention Class ব্যবহার করে আপনি ডিফল্ট কনফিগারেশন পদ্ধতি সেট করতে পারেন, যা আপনার মডেল ক্লাসের জন্য সাধারণ রুলস নির্ধারণ করে।
Fluent Mapping Configuration
Fluent Mapping Configuration NHibernate এ মডেল ক্লাসের ম্যাপিং কনফিগার করার একটি প্রোগ্রাম্যাটিক পদ্ধতি। এটি আপনাকে ক্লাস, প্রোপার্টি এবং টেবিলের মধ্যে সম্পর্ক তৈরি করার জন্য আরও নমনীয়তা প্রদান করে। Fluent NHibernate একটি প্লাগইন হিসেবে কাজ করে, যা কনফিগারেশন এবং মডেল ম্যাপিংয়ের জন্য Fluent API প্রদান করে।
Fluent Mapping Example
ধরা যাক আমাদের একটি Employee ক্লাস আছে এবং এটি Employee টেবিলের সাথে ম্যাপ করতে হবে। নিচে এর উদাহরণ দেয়া হলো:
using FluentNHibernate.Mapping;
public class Employee
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual decimal Salary { get; set; }
}
public class EmployeeMap : ClassMap<Employee>
{
public EmployeeMap()
{
Table("Employee"); // টেবিল নাম নির্ধারণ
Id(x => x.Id).GeneratedBy.Identity(); // প্রাথমিক কী সেট করা
Map(x => x.Name).Length(100).Not.Nullable(); // Name প্রোপার্টি ম্যাপ করা
Map(x => x.Salary).Precision(18).Scale(2); // Salary প্রোপার্টি ম্যাপ করা
}
}
এখানে:
- Table() টেবিলের নাম নির্ধারণ করে।
- Id() মেথডের মাধ্যমে প্রাথমিক কী এবং তার জেনারেশন স্ট্রাটেজি নির্ধারণ করা হয়।
- Map() মেথড ব্যবহার করে অন্যান্য প্রোপার্টিগুলি টেবিলের কলামগুলির সাথে ম্যাপ করা হয়।
এটি Fluent NHibernate কনফিগারেশন ম্যাপিংয়ের একটি সাধারণ উদাহরণ।
Fluent NHibernate Configuration Setup
এখন, আপনাকে SessionFactory তৈরি করতে হবে যাতে Fluent Mapping ফাইলগুলো লোড করা যায়। এই কনফিগারেশনটি সাধারণত একটি FluentConfiguration অবজেক্টের মাধ্যমে সম্পন্ন করা হয়।
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
public class NHibernateHelper
{
public static ISessionFactory SessionFactory { get; private set; }
static NHibernateHelper()
{
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString("your_connection_string"))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<EmployeeMap>())
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
এখানে:
- Fluently.Configure() ব্যবহার করে NHibernate কনফিগার করা হচ্ছে।
- Mappings() মেথডের মাধ্যমে FluentMappings যোগ করা হচ্ছে, যা কনফিগারেশন ফাইলে ম্যাপিং তথ্য পাবে।
Convention Class তৈরি করা
NHibernate-এ Convention ক্লাস ব্যবহার করে আপনি সাধারণ কনফিগারেশন পদ্ধতি তৈরি করতে পারেন, যা আপনার সকল মডেল ক্লাসে প্রয়োগ হবে। Convention ক্লাস দ্বারা আপনি প্রাথমিক কী কিভাবে ম্যাপ হবে, প্রোপার্টির টাইপ এবং নাম কীভাবে ডেটাবেসের কলামগুলোর সাথে সম্পর্কিত হবে তা কাস্টমাইজ করতে পারেন।
উদাহরণ:
using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.Instances;
public class CustomConvention : IClassConvention, IPropertyConvention
{
// টেবিল নাম কনভেনশন
public void Apply(IClassInstance instance)
{
instance.Table(instance.EntityType.Name); // টেবিল নাম হবে ক্লাস নামের মতো
}
// প্রোপার্টি নাম কনভেনশন
public void Apply(IPropertyInstance instance)
{
instance.Column(instance.Property.Name.ToLower()); // প্রোপার্টি নাম ডাটাবেস কলামে ছোট হাতেই থাকবে
}
}
এখানে:
- IClassConvention ইন্টারফেসটি ক্লাসের টেবিল নাম কাস্টমাইজ করতে সাহায্য করে।
- IPropertyConvention ইন্টারফেসটি প্রোপার্টির কলাম নাম কাস্টমাইজ করে।
এই CustomConvention ক্লাসটি সমস্ত ক্লাস এবং প্রোপার্টি ম্যাপিংয়ের জন্য সাধারণ কনভেনশন সেট করবে।
Fluent Configuration এর সাথে Convention Class ব্যবহার করা
Fluent Configuration-এ Convention Class যুক্ত করতে হলে, আপনাকে এটি Mappings() মেথডে অন্তর্ভুক্ত করতে হবে। নিচে তার উদাহরণ:
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
public class NHibernateHelper
{
public static ISessionFactory SessionFactory { get; private set; }
static NHibernateHelper()
{
SessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString("your_connection_string"))
.Mappings(m =>
m.FluentMappings
.AddFromAssemblyOf<EmployeeMap>()
.Conventions.Add<CustomConvention>()) // Convention Class যোগ করা
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
এখানে:
- Conventions.Add() ব্যবহার করে কাস্টম কনভেনশন ক্লাসটি ফ্লুয়েন্ট কনফিগারেশনে অন্তর্ভুক্ত করা হয়েছে।
উপসংহার
Fluent Mapping Configuration এবং Convention Class ব্যবহার করে NHibernate-এর মডেল ম্যাপিং আরো বেশি নমনীয় এবং কাস্টমাইজযোগ্য করা যায়। Fluent NHibernate আপনাকে XML কনফিগারেশন ফাইলের পরিবর্তে কোড-বেসড কনফিগারেশন প্রদান করে, যা আরও দ্রুত এবং সোজা। Convention ক্লাসের মাধ্যমে আপনি সাধারণ কনফিগারেশন নিয়মাবলী (যেমন টেবিল ও কলাম নামের কনভেনশন) এক জায়গায় রেখে পুরো অ্যাপ্লিকেশন জুড়ে প্রয়োগ করতে পারেন।
Read more